package com.matrix.toolutils.common

import android.content.Context
import android.text.TextUtils
import com.matrix.toolutils.common.ApplicationUtils
import java.io.File
import java.util.*

/**
 * 作者：Administrator
 * 日期：2024/10/15 15:41
 * 描述：
 */
object FilePathUtils {
    /**
     * 获取App资源路径
     *
     * @return
     */
    private fun getResourcePath(): String {
        val path: String = getFilePath(ApplicationUtils.mApp, "agent")
        initFileDir(path)
        return path
    }

    fun getLogPath(): String {
        return getResourcePath() + File.separator + "log"
    }

    fun getImagePath(): String {
        return getResourcePath() + File.separator + "image"
    }

    fun getFilePath(): String {
        return getResourcePath() + File.separator + "file"
    }

    /**
     * 根据文件名获取根路径
     *
     * @param context
     * @param fileName
     * @return
     */
    fun getFilePath(context: Context, fileName: String): String {
        // 文件名为空则返回根路径
        if (TextUtils.isEmpty(fileName)) {
            return getAbsolutePath(context)
        }

        // 文件名以根路径开头则其本身就是完整路径
        return if (fileName.startsWith(getAbsolutePath(context))) {
            fileName
        } else {
            getAbsolutePath(context) + File.separator + fileName
        }
    }

    /**
     * 获取绝对路径(不存在sd卡时返回缓存文件路径)
     *
     * @return
     */
    fun getAbsolutePath(context: Context): String {
        val sdCardRoot = findSDCardRoot(context.getExternalFilesDir(null))
        val directory = File(sdCardRoot.toString())
        return if (directory != null) {
            directory.path
        } else {
            context.getExternalFilesDir(null)!!.absolutePath
        }
        //应用专属外部存储空间
//        context.getFilesDir();
//        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        //返回内部存储
//        return context.getExternalFilesDir(null).getAbsolutePath();
//        } else {
//            // 不存在SD卡，就返回缓存文件夹路径
//            context = context.getApplicationContext();
//            return context.getCacheDir().getAbsolutePath();
//        }
    }

    // 申明
    private fun findSDCardRoot(externalFilesDir: File?): File {
        var parent: File
        val equals = Objects.requireNonNull(externalFilesDir!!.parentFile.also {
            parent = it
        }).name == "0"
        return if (!equals) {
            findSDCardRoot(parent)
        } else {
            parent
        }
    }

    /**
     * 初始化应用文件目录
     *
     * @param appResourcePath
     */
    private fun initFileDir(appResourcePath: String) {
        val appFile = File(appResourcePath)
        if (!appFile.exists()) {
            appFile.mkdirs()
        }
        val log = File(appFile, "log")
        if (!log.exists()) {
            log.mkdirs()
        }
        val image = File(appFile, "image")
        if (!image.exists()) {
            image.mkdirs()
        }
        val file = File(appFile, "file")
        if (!file.exists()) {
            file.mkdirs()
        }
    }


}